import 'dart:typed_data';

import 'package:bluetooth_protocols_parser_plugin/src/lorin/realtime/error/v12s_realtime_error.dart';
import 'package:bluetooth_protocols_parser_plugin/src/lorin/realtime/status/v12s_realtime_status.dart';
import 'package:bluetooth_protocols_plugin/library.dart';

class V12sIntegratedRealtimeInfo extends LorinIntegratedRealtimeInfo {
  // 实时状态
  V12sRealtimeStatus status = V12sRealtimeStatus.fromBytes(Uint8List(4));

  // 实时错误
  V12sRealtimeError error = V12sRealtimeError.fromBytes(Uint8List(8));

  V12sIntegratedRealtimeInfo.fromBytes(Uint8List bytes)
      : super.fromBytes(bytes) {
    if (bytes.length < minLength) {
      throw Exception(
          '$runtimeType Bytes length is less than minimum required length. length: ${bytes.length}, minLength: $minLength');
    }
    // 解析状态和错误信息
    status = V12sRealtimeStatus.fromBytes(bytes.sublist(80, 84));
    error = V12sRealtimeError.fromBytes(bytes.sublist(84, 92));
  }

  @override
  int get minLength => 92;

  @override
  Map<String, dynamic> toMap() {
    Map map = {
      'data_format': dataFormat,
      'bus_voltage': busVoltage,
      'bus_current': busCurrent,
      'charge_voltage': chargeVoltage,
      'charge_current': chargeCurrent,
      'speed': speed,
      'acce': acce,
      'torque': torque,
      'output_rate': outputRate,
      'battery_output_power': batteryOutputPower,
      'motor_output_power': motorOutputPower,
      'estimated_total_mileage': estimatedTotalMileage,
      'mos_temperature': mosTemperature,
      'motor_temperature': motorTemperature,
      'board_temperature': boardTemperature,
      'lte_signal': lteSignal,
      'battery_percentage': batteryPercentage,
      'battery_percentage_for_ride': batteryPercentageForRide,
      'rt_over_speed_tilt_back_threshold': rtOverSpeedTiltBackThreshold,
      'rt_over_speed_warning_threshold': rtOverSpeedWarningThreshold,
      'max_speed': maxSpeed,
      'max_power': maxPower,
      'max_motor_power': maxMotorPower,
      'single_mileage': singleMileage,
      'single_consumption': singleConsumption,
      'single_recovery': singleRecovery,
      'single_ride_time': singleRideTime,
      'single_power_on_time': singlePowerOnTime,
      'total_mileage': totalMileage,
      'total_consumption': totalConsumption,
      'total_recovery': totalRecovery,
      'total_ride_time': totalRideTime,
      'total_power_on_time': totalPowerOnTime,
      'version': '$runtimeType',
    };
    return {...map, ...status.toMap(), ...error.toMap()};
  }

  @override
  int dataIntValue() {
    throw UnimplementedError();
  }

  @override
  int dataLength() {
    throw UnimplementedError();
  }

  @override
  Uint8List? toBytes() {
    throw UnimplementedError();
  }
}

/*
  int16_t bus_voltage;                  //当前电池总电压      单位 0.01V
  int16_t bus_current;                  //当前电池输出总电流  单位 0.01A
  int16_t charge_voltage;               //充电口电压          单位 0.01V （来自驱动板）
  int16_t charge_current;               //充电总电流          单位 0.01A （来自驱动板）
  int16_t speed;                        //当前车速            单位 0.01km/h
  int16_t acce;                         //行驶加速度          单位 0.01km/h/s
  int16_t torque;                       //电机输出扭矩        单位 0.01N/m
  int16_t output_rate;                  //输出矢量电压百分比  单位 0.01%  范围 0~10000
  int16_t battery_output_power;         //电池输出功率        单位 1W
  int16_t motor_output_power;           //电机输出功率        单位 1W

  uint16_t battery_percentage;          //剩余电量            单位 0.01%
  uint16_t battery_percentage_for_ride; //剩余可行驶的电量百分比（剩余可行驶电量占总可行驶电量的比值） 单位 0.01%
  uint16_t estimated_total_mileage;     //预计满电可行驶里程  单位 0.01km
  uint16_t rt_over_speed_tilt_back_threshold;       //实时超速翘板阈值   单位 0.01km/h
  uint16_t rt_over_speed_warning_threshold;         //实时超速报警阈值   单位 0.01km/h

  int8_t mos_temperature;               //散热器(MOS管)温度   单位 °C  偏置80，即数值0代表80°C
  int8_t motor_temperature;             //电机温度            单位 °C  偏置80，即数值0代表80°C
  int8_t board_temperature;             //主板高温区温度      单位 °C  偏置80，即数值0代表80°C
  uint8_t lte_signal;                   //LTE信号强度  0 无信号  1 一格信号  2 二格信号  3 三格信号  4 四格信号

  uint16_t max_speed;             //最高速度         单位 0.01km/h
  uint16_t max_power;            //最大总功率       单位 W
  uint16_t max_motor_power;       //最大电机输出功率 单位 W

  uint16_t single_mileage;               //本次里程         单位 0.01km
  uint32_t single_consumption;           //本次消耗能量         单位 0.01 KJ
  uint32_t single_recovery;              //本次回收能量         单位 0.01 KJ
  uint32_t single_ride_time;             //本次骑行时间         单位 S
  uint32_t single_power_on_time;         //本次开机时间         单位 S

  uint32_t total_mileage;               //总里程             单位 0.01km
  uint32_t total_consumption;           //总消耗能量         单位 0.01 KJ
  uint32_t total_recovery;              //总回收能量         单位 0.01 KJ
  uint32_t total_ride_time;             //总骑行时间         单位 S
  uint32_t total_power_on_time;         //总开机时间         单位 S
*/
